home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
tools
/
sharp
/
sxwork3.lzh
/
サンプル実用編
/
爆弾ゲーム
/
BOMB.H
< prev
next >
Wrap
Text File
|
1994-03-10
|
7KB
|
185 lines
/******************************************************************************
* bomb.h: 爆弾ゲーム用ヘッダファイル
******************************************************************************
* Workroom SX-68K Sample Program Copyright 1994 SHARP
*
* 定数定義
*/
/* ウィンドウタイトル */
#define WINTITLE ((_LASCII) "\x0a爆弾ゲーム")
#define MARGIN 10 /* ウィンドウの縁の幅 */
#define INFO_HEIGHT 50 /* 情報フィールドの幅 */
#define MAPX 30 /* マップワークの大きさ */
#define MAPY 16
#define TMWIDE (30 + 2 + 2) /* 経過時間表示領域の幅 */
#define TMHEIGHT (12 + 2 + 2) /* 高さ */
#define TMMGX (MARGIN + 6 + 50) /* マージン */
#define TMMGY 4
#define RBTNWIDE 56 /* 再ゲームボタン幅 */
#define RBTNHEIGHT 20 /* 高さ */
#define RBTNMGX (MARGIN + 6) /* マージン */
#define RBTNMGY 4
/* セル座標から座標を計算する */
#define GRID(x,y) LONGWORD((x) * 16 + MARGIN, (y) * 16 + MARGIN * 2 + INFO_HEIGHT)
/* ウィンドウサイズを計算する */
#define WSIZE(x,y) LONGWORD((x) * 16 + MARGIN * 2, (y) * 16 + MARGIN * 3 + INFO_HEIGHT)
/* ベストタイム登録用ダイアログの表示位置 */
#define DLG1_X 298 /* X座標 */
#define DLG1_Y 202 /* Y座標 */
#define DLG1_H 172 /* ダイアログの幅 */
#define DLG1_V 108 /* ダイアログの高さ */
/* ベストタイム表示用ダイアログの表示位置 */
#define DLG2_X 254 /* X座標 */
#define DLG2_Y 150 /* Y座標 */
#define DLG2_H 260 /* ダイアログの幅 */
#define DLG2_V 140 /* ダイアログの高さ */
#define SCR_MARGIN 8 /* 上下左右の影付きフレームのマージン */
/* ベストタイム記録ファイル用文字列バッファサイズ */
#define BUFF_SIZE 60
#define TIME_LIMIT 9999 /* タイムオーバーの時間 */
/* イベントマスク */
#define EVENTMASK (EM_IDLE | EM_MSLDOWN | EM_MSRDOWN | EM_UPDATE | EM_ACTIVATE | EM_SYSTEM1 | EM_SYSTEM2)
enum mapStatus { /* fMap[iY][iX] = セルのステータス */
IDV_PLAIN, /* 無印 */
IDV_VAL1, /* 数字セル(1) */
IDV_VAL2, /* 数字セル(2) */
IDV_VAL3, /* 数字セル(3) */
IDV_VAL4, /* 数字セル(4) */
IDV_VAL5, /* 数字セル(5) */
IDV_VAL6, /* 数字セル(6) */
IDV_VAL7, /* 数字セル(7) */
IDV_VAL8, /* 数字セル(8) */
IDV_BOM = 0xff /* 爆弾 */
};
enum checkStatus { /* fCheck[iX][iY] = セルの状態 */
IDC_FACE, /* 未処理 */
IDC_FLAG, /* 旗 */
IDC_QMARK, /* ?マーク */
IDC_PFACE = 20, /* オープンされたフィールド */
IDC_PQMARK = 22, /* オープンされた?マーク */
IDC_RBOM = 0x0f, /* 爆弾に当たった */
IDC_CBOM = 0xf0, /* ×印爆弾 */
IDC_OPEN = 0xff /* オープンされたフィールド */
};
enum gameProgress { /* sTrends = ゲーム進行状況 */
IDT_BEFORE, /* 開始前 */
IDT_BEGIN, /* 開始時 */
IDT_PLAYING, /* 進行中 */
IDT_CLEAR, /* クリアー終了時 */
IDT_OVER /* オーバー終了時 */
};
enum gameLevel { /* level = ゲームレベル */
IDL_BEG, /* ビギナークラス */
IDL_MID, /* ミドルクラス */
IDL_EXP /* エキスパートクラス */
};
/*
* 構造体宣言
*/
typedef struct CPoint { /* セル座標 */
int x;
int y;
} CPoint;
typedef struct ComVal { /* 共通変数 */
Window *windowPtr; /* ウィンドウポインタ */
BOOLEAN activeFlag; /* アクティブフラグ */
TsEvent event; /* イベントレコード */
int eventMask; /* イベントマスク */
int errorCode; /* エラーコード */
BOOLEAN endFlag; /* 終了フラグ */
Rect rcReplay; /* 再ゲームボタンのレクタングル */
LASCII player; /* プレーヤーの名前 */
char myPath[TS_NAMEMAX]; /* 自分の起動パス名 */
char myName[24]; /* 自分のタスク名 */
Handle resDiEnt; /* ダイアログアイテムのハンドル1 */
Handle resDiRec; /* ダイアログアイテムのハンドル2 */
int level; /* ゲームのレベル */
int bombNum; /* 爆弾の数 */
int gridX; /* 水平マス数 */
int gridY; /* 垂直マス数 */
int sTrends; /* ゲームの進行状態 */
int seconds; /* 経過タイム */
int oldTime; /* 前回のシステム時間 */
int restCell; /* 未処理セル数 */
int restFlag; /* 残り旗数 */
unsigned char fCheck[MAPY][MAPX]; /* 各マスの現在の状態 */
unsigned char fMap[MAPY][MAPX]; /* 爆弾の埋まっているマップ */
/* ベストタイム記録ファイル用文字列バッファ */
char record[3][BUFF_SIZE];
RectImg **btnImg[8]; /* イメージハンドル */
RectImg **numImg[8];
RectImg **bombImg[4];
} ComVal;
/*
* 関数プロトタイプ
*/
/* bmmain.c */
BOOLEAN init(ComVal *); /* 初期化処理 */
BOOLEAN createWindow(ComVal *);
void idleEvent(ComVal *); /* アイドルイベント処理 */
void msLDownEvent(ComVal *); /* マウスレフトダウンイベント処理 */
void msRDownEvent(ComVal *); /* マウスライトダウンイベント処理 */
void selectMenu(ComVal *); /* ポップアップメニューの作成と選択 */
void keyDownEvent(ComVal *); /* キーダウンイベント処理 */
void updateEvent(ComVal *); /* アップデートイベント処理 */
void drawGraph(ComVal *);
void activateEvent(ComVal *); /* アクティベートイベント処理 */
void systemEvent(ComVal *); /* シスイベント処理 */
void showErrDialog(ComVal *);
void endProc(int, ComVal *); /* 終了処理 */
int findOwn(ComVal *); /* 自分と同じ名前のタスクを捜す */
void addUpdate(Window *, Rect *); /* アップデートイベントの発生 */
/* bomb.c */
/* ポインタ座標からセル座標を計算する */
BOOLEAN getGrid(ComVal *, LPoint, CPoint *);
void drawCell(ComVal *); /* セルマップの再描画処理 */
void changeLevel(ComVal *, int); /* ゲームレベル変更処理 */
void enterDlg(ComVal *); /* ベストタイム保持用ダイアログ作成 */
int enterFilter(Dialog *, Event *); /* ダイアログ上のイベント処理 */
void recordDlg(ComVal *); /* ベストタイム表示用ダイアログ作成 */
int recordFilter(Dialog *, Event *); /* ダイアログ上のイベント処理 */
void setDItemText(Dialog *, int, _LASCII);
void getDItemText(Dialog *, int, _LASCII);
BOOLEAN mountImgRes(ComVal *); /* ビットイメージのハンドルを確保 */
/* "爆弾ゲーム.lb" をカレントリソースに */
BOOLEAN loadResource(ComVal *pcv);
void drawPat3(RectImg **, LPoint); /* 'PAT3'の描画 */
void drawPat4(RectImg **, LPoint); /* 'PAT4'の描画 */
void getParam(ComVal *, char **); /* オプションスイッチの処理 */
void initMap(ComVal *, CPoint *); /* セルマップ初期化(BOM配置) */
void clearGame(ComVal *); /* ゲームクリアー処理 */
void regame(ComVal *); /* 再ゲーム処理 */
void bestTime(ComVal *); /* ベストタイム保持処理 */
void drawBitmap(ComVal *, CPoint *); /* セル描画 */
void drawMark(ComVal *, int, int, unsigned char); /* 旗描画 */
void setValue(ComVal *, int, int); /* 爆弾のカウント */
void safetyZone(ComVal *, CPoint *); /* 爆弾のないセルのオープン */
void openCell(ComVal *, CPoint *); /* セルを開く */
void openAllBomb(ComVal *, CPoint *); /* 全部の爆弾のセルを開く */
void searchMesh(ComVal *, CPoint *); /* 爆弾の放射状サーチ */
void openBomb(ComVal *, int, int); /* 爆弾のセルを開く */
void timeCounter(ComVal *); /* 経過タイムのカウント処理 */
void drawZan(ComVal *); /* 爆弾残数の表示 */
void drawTime(ComVal *); /* 経過タイムの表示 */
void drawRgBtn(ComVal *); /* 再ゲームボタンの表示 */
/* ピクチャーボタンの押された処理 */
BOOLEAN checkPctBtn(ComVal *, Rect *, LPoint);
void revFillRect(Rect *); /* レクタングル全体を反転 */
void revFrameRect(Rect *); /* レクタングルのフレームを反転 */